﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using AccesoDatos;
using Entidades.Negocio;
using Entidades;
using System.Data.Entity;
using System.Data.Objects;

namespace LogicaNegocios
{
    static public class AccidentesLN
    {
        static public Accidente agregarAccidente(this Accidente accidenteview)
        {
            try
            {
                MILPO_VIDEOS_Entities contexto = new MILPO_VIDEOS_Entities();
                ACCIDENTE accidente = accidenteview.toACCIDENTE();
                accidente.CHRESTADO = Constantes.ESTADO_HABILITADO;
                contexto.ACCIDENTE.AddObject(accidente);
                contexto.SaveChanges();
                return accidente.toAccidente();
            }
            catch( Exception e)
            {
                throw e;
            }
        }

        static public void modificarAccidente(this Accidente accidenteview)
        {
            MILPO_VIDEOS_Entities contexto = new MILPO_VIDEOS_Entities();
            ACCIDENTE accidente = contexto.ACCIDENTE.Where(a => a.INTCODACCIDENTE == accidenteview.INTCODACCIDENTE).FirstOrDefault();
            accidente.INTCODACCIDENTE = accidenteview.INTCODACCIDENTE;
            accidente.VCHDESCRIPCION = accidenteview.VCHDESCRIPCION;
            accidente.INTDIASAMOSTRAR = accidenteview.INTDIASAMOSTRAR;
            accidente.DTMFECHA = Funciones.StringToDate(accidenteview.Fecha);
            accidente.CHRESTADO = Constantes.ESTADO_HABILITADO;
            accidente.VCHUSUARIOMODIFICACION = accidenteview.VCHUSUARIOMODIFICACION;
            accidente.DTMFECHAMODIFICACION = DateTime.Now;
            contexto.SaveChanges();
        }

        static public void eliminarAccidente(this Accidente accidenteview)
        {
            MILPO_VIDEOS_Entities contexto = new MILPO_VIDEOS_Entities();
            ACCIDENTE accidente = contexto.ACCIDENTE.Where(a => a.INTCODACCIDENTE == accidenteview.INTCODACCIDENTE).FirstOrDefault();
            accidente.CHRESTADO = Constantes.ESTADO_ELIMINADO;
            accidente.VCHUSUARIOMODIFICACION = accidenteview.VCHUSUARIOMODIFICACION;
            accidente.DTMFECHAMODIFICACION = DateTime.Now;
            contexto.SaveChanges();
        }


        static public List<Accidente> listarAccidente(this FiltroAccidente filtroAccidente)
        {
            MILPO_VIDEOS_Entities contexto = new MILPO_VIDEOS_Entities();
            

            DateTime desde = Funciones.StringToDate(filtroAccidente.FechaDesde);
            //DateTime desde = new DateTime(filtroDesdeDate.Year, filtroDesdeDate.Month, filtroDesdeDate.Day,0,0,0);

            DateTime filtroHastaDate = Funciones.StringToDate(filtroAccidente.FechaHasta);
            DateTime hasta = new DateTime(filtroHastaDate.Year, filtroHastaDate.Month, filtroHastaDate.Day, 23, 59, 59);

            List<ACCIDENTE> listaACCIDENTE = contexto.ACCIDENTE.Where(a => a.DTMFECHA >= desde &&
                a.DTMFECHA <= hasta && a.CHRESTADO == Constantes.ESTADO_HABILITADO
                && a.VCHDESCRIPCION.Contains(filtroAccidente.Descripcion)
                ).OrderBy(a => a.DTMFECHA) 
                .ToList();
            List<Accidente> listaAccidente = new List<Accidente>();

            foreach (ACCIDENTE accidente in listaACCIDENTE)
            {
                listaAccidente.Add(accidente.toAccidente());
            }
            return listaAccidente;

        }

        static public List<Accidente> listarAccidenteReproductor()
        {
            DateTime hoy = DateTime.Now;
            MILPO_VIDEOS_Entities contexto = new MILPO_VIDEOS_Entities();
            List<ACCIDENTE> listaACCIDENTE = contexto.ACCIDENTE.
                Where(a => EntityFunctions.DiffDays(a.DTMFECHACREACION.Value,hoy) <= a.INTDIASAMOSTRAR).ToList();
            List<Accidente> listaAccidente = new List<Accidente>();
            foreach (ACCIDENTE accidente in listaACCIDENTE)
            {
                listaAccidente.Add(accidente.toAccidente());
            }
            return listaAccidente;
        }

        static public Accidente obtenerAccidente(this FiltroAccidente filtroAccidente)
        {
            MILPO_VIDEOS_Entities contexto = new MILPO_VIDEOS_Entities();
            ACCIDENTE accidente = contexto.ACCIDENTE.Where(a => a.INTCODACCIDENTE == filtroAccidente.id).FirstOrDefault();
            return accidente.toAccidente();
        }

        
        
        
    }
}
